キャンペーンの今のうちに是非!!↓


⇒「ひろゆきの名著『1%の努力』を無料で全部読む方法

【Swift奮闘記ep16】継承について(クラス・イニシャライズの継承、オーバーライド、superキーワード)

IPhoneアプリ作成Swift奮闘記

この本を見ながら進めてる↓

前回⇒「【Swift奮闘記ep15】イニシャライザとデイニシャライザについて

イニシャライザを終えて今回は継承について学ぶ。

継承とは文字どおり、何かを「受け継ぐ」ことだ。

Aがもっている機能をBに受け継がせる方法をみていく。

今回はクラスの継承、あとイニシャライズの継承、さらに上書きするオーバーライド、親クラスのプロパティやメソッドを子クラスが使えるようにするsuperキーワードについて学ぶ。

 

クラスの継承

さっそく、ザクザクコードを打ってみた。

ということでクラスを継承することによって元のクラスの機能を使うことができる。

元のクラスのことを「スーパークラス(又はベースクラス)」、承継先のクラスを「サブクラス」というので覚えておこう。

 

オーバーライド

クラスの継承を行いつつ、インスタンスプロパティ・型プロパティ・インスタンスメソッド・型メソッド・サブスクリプトの単位で上書きをする機能をオーバーライドという。

宣言の頭にoverrideとつければ以下のようにオーバーライドできる。

比較的簡単にオーバーライドできることがわかる。

 

superキーワード

さらに親クラス(スーパークラス)で定義したプロパティやメソッドを子クラス(サブクラス)で使うことができる。

オーバーライドのところで説明したコードを変更させる。

super.ride()というふうに書き換えて「numberOfPersons += 1」 を表現した。

 

イニシャライザの継承

クラスを承継する際に、イニシャライザも承継することができる。

ただ条件?みたいなものがあって、悩ましい。

スーパークラスにイニシャライザが定義されているとして、その際サブクラスにイニシャライザを定義していなければ、スーパークラスのイニシャライザがそのまま継承される。

もしサブクラスにイニシャライザを定義する場合は、スーパークラスのイニシャライザをサブクラス内のイニシャライザ内で再定義しないといけないようだ。

再定義っていう言葉が正しいかどうかはわからんが、その方法が複雑というかいまいちあまり意味がわかっていない。

※追記

再定義」というのは間違いでスーパークラスのイニシャライザを「呼び出す」が正解。

すでに定義してあるイニシャライズを使う必要がある」ということだ。

 

super.init(a: a)のところがさっぱり意味不明だ。

この部分がスーパークラスのイニシャライザを定義しているというのはわかるのだが、(a: a)がわからない。aは引数、:の横のaは・・・ここはIntなどの型を入れる場所じゃないのかな?

わからんな〜。そのうちわかるのだろうか。

まあこれは疑問として覚えておこう。

イニシャライザをサブクラスのイニシャライザ内でスーパークラスのイニシャライザを定義する呼び出す際のかっこの中がさっぱりわからない。super.init(a: a)のこと。

 

※追記

サブクラスでイニシャライザが設定されている」のでサブクラス内でスーパークラスのイニシャライザを「呼び出す」必要がある。

super.init(a:a)の引数である「a」にはサブクラスで与えられる引数のaの値を代入する、という意味になる。

 

今回はこれにて終わり。

続き⇒「【Swift奮闘記ep17】ストラクチャ(ストラクチャの定義、できること、参照型と値型の違い、プロパティ・イニシャライザ)

コメント